import router from '@/router/index'
import { ElNotification } from 'element-plus'
import { LOGIN_URL } from '@/config'
import { removeToken } from '@/utils/cookies'
import { useAuthStore } from '@/store/modules/auth'

const context = require.context('@/views', true, /\.vue$/)
const routerAry: any = []

context.keys().forEach((fileName) => {
  const pathConfig = context(fileName)
  const path = '/' + fileName.substring(2, fileName.length - 4)
  routerAry.push({
    path,
    component: pathConfig.default,
  })
})

/**
 * @description 初始化动态路由 (7.22之前左侧菜单添加路由版本)
//  */
// export const initDynamicRouter = async () => {
//   const authStore = useAuthStore()

//   try {
//     // await authStore.getListProject()

//     // 获取菜单列表
//     await authStore.getAuthMenuList()

//     // 2.判断当前用户有没有菜单权限
//     if (!authStore.authMenuListGet.length) {
//       ElNotification({
//         title: '无权限访问',
//         message: '当前账号无任何菜单权限，请联系系统管理员！',
//         type: 'warning',
//         duration: 3000,
//       })
//       removeToken()
//       router.replace(LOGIN_URL)
//       return Promise.reject('No permission')
//     }

//     // 3.添加动态路由
//     authStore.flatMenuListGet.forEach((item: any) => {
//       item.children && delete item.children
//       // console.log('item-----001', item)
//       const layoutRoute = router.getRoutes().find(route => route.name === 'layout');
//       if (item.component && typeof item.component == 'string') {
//         item.component = routerAry.find((r: any) => r.path === item.component)?.component
//       }
//       if (item.meta?.isFull) {
//         // 使用生成的 chunk 名称  
//         // const chunkName = generateChunkName(item.path);  
//         // item.component = () => import(/* webpackChunkName: "[request]" */ `..${item.path}.vue`);  
//         // item.component = () => import(/* webpackChunkName: "[request]" */ `${item.path}`);  
//         // item.component = `.${item.path}.vue`;  

//         // 注意：虽然这里使用了 `/* webpackChunkName: "[request]" */`，但 Webpack 实际上不会接受 "[request]" 作为动态的 chunk 名称。  
//         // 我们真正想要的是让 Webpack 知道我们正在动态导入一个模块，并允许它自动处理 chunk 的分割和命名。  
//         // 因此，Webpack 将基于模块请求（即 `./views/${item.path}.vue`）来自动生成一个 chunk 名称。  
        
//         // 为了在构建时具有可读的 chunk 名称，你可以考虑使用 Webpack 的配置选项来重命名这些 chunk，但这通常需要在构建时完成，而不是在运行时。  
        
//         router.addRoute(item)
//       } else {
//         // console.log('动态路由----001', item, router)
//         // 假设layout路由已经被定义且存在于router.options.routes中
//         if (layoutRoute) {
//           // 确保layoutRoute有children属性，如果没有，初始化为空数组
//           if (!layoutRoute.children) layoutRoute.children = [];
//           // 遍历并添加动态路由到layout的children中
//             // 添加到layout的子路由中
//             layoutRoute.children.push(item);
          
//           // 由于直接修改了路由配置数组，可能需要通知Vue Router刷新路由视图
//           // Vue Router 4的nextTick或Vue Router 3的手动替换
//           // router.replace({ path: '/', force: true }).catch(() => {});
//         } else {
//           console.error('Parent route "layout" not found.');
//         }
//         router.addRoute('layout', item)
//       }
//     })
//     console.log('动态路由----002', router.getRoutes(), router)
//   } catch (error) {
//     // 当按钮 || 菜单请求出错时，重定向到登陆页
//     removeToken()
//     router.replace(LOGIN_URL)
//     return Promise.reject(error)
//   }
// }
/**
 * @description 初始化动态路由
 */
export const initDynamicRouter = async () => {
  const authStore = useAuthStore()

  try {
    // await authStore.getListProject()

    // 获取菜单列表
    await authStore.getAllAuthRouters()
    await authStore.getAuthMenuList()
    // 2.判断当前用户有没有菜单权限
    if (!authStore.authMenuListGet.length) {
      ElNotification({
        title: '无权限访问',
        message: '当前账号无任何菜单权限，请联系系统管理员！',
        type: 'warning',
        duration: 3000,
      })
      removeToken()
      router.replace(LOGIN_URL)
      return Promise.reject('No permission')
    }

    // 3.添加动态路由
    authStore.allRouterListGet.forEach((item: any) => {
      const tempObj = {
        path: item.formLoadPath,
        name: item.formEname,
        meta: {
          // icon: "",
          // isFull: false,
          // isKeepAlive: true,
          // isLink: "",
          title: item.formCname,
        },
        redirect: undefined,
        children: []
      }
      const layoutRoute = router.getRoutes().find(route => route.name === 'layout');
        // 假设layout路由已经被定义且存在于router.options.routes中
        if (layoutRoute) {
          // 确保layoutRoute有children属性，如果没有，初始化为空数组
          if (!layoutRoute.children) layoutRoute.children = [];
          // 遍历并添加动态路由到layout的children中
            // 添加到layout的子路由中
            layoutRoute.children.push(tempObj);
          
          // 由于直接修改了路由配置数组，可能需要通知Vue Router刷新路由视图
          // Vue Router 4的nextTick或Vue Router 3的手动替换
          // router.replace({ path: '/', force: true }).catch(() => {});
        } else {
          console.error('Parent route "layout" not found.');
        }
        router.addRoute('layout', tempObj)
      
    })
  } catch (error) {
    // 当按钮 || 菜单请求出错时，重定向到登陆页
    removeToken()
    router.replace(LOGIN_URL)
    return Promise.reject(error)
  }
}
// 生成 chunk 名称  
function generateChunkName(path) {  
  // 根据你的需求生成一个唯一的或可预测的 chunk 名称  
  // 例如，只使用路径的最后一部分作为 chunk 名称  
  const name = path.split('/').pop();  
  return `route-${name}`;  
}  